/*************************************************************************
    > File Name: 1.printf_mutex.c
    > Author: Ykk
    > Mail: 3393579535@qq.com 
    > Created Time: 2023年05月11日 星期四 19时59分09秒
 ************************************************************************/

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#include<unistd.h>
#include<pthread.h>

//互斥锁变量
//pthread_mutex_t	mutex;

//线程处理函数 输出大写字母
void *fun1(void *arg)
{
	int i = 0;
	//加锁
	pthread_mutex_lock(arg);
	for(i = 'A';i <= 'Z';i++)
	{
		putchar(i);
		fflush(stdout);
		usleep(100000);
	}
	//解锁
	pthread_mutex_unlock(arg);

	return NULL;
}
//线程处理函数 输出小写字母
void *fun2(void *arg)
{
	int i = 0;
	//加锁
	pthread_mutex_lock(arg);
	for(i = 'a';i <= 'z';i++)
	{
		putchar(i);
		fflush(stdout);
		usleep(100000);
	}
	//解锁
	pthread_mutex_unlock(arg);

	return NULL;
}

//模拟输出字符
int main()
{
	int ret = -1;
	pthread_t tid1,tid2;
    pthread_mutex_t mutex;
	//初始化一个互斥量 互斥锁
	ret = pthread_mutex_init(&mutex,NULL);
	if(0 != ret)
	{
		printf("pthread_mutex_init failed...\n");
		return 1;
	}
	printf("初始化一个互斥量成功....\n");

	//创建两个线程
	pthread_create(&tid1,NULL,fun1,&mutex);
	pthread_create(&tid2,NULL,fun2,&mutex);

	//等待两个线程结束
	pthread_join(tid1,NULL);
	pthread_join(tid2,NULL);

	printf("\n");
	printf("main thread exit...\n");

	//销毁互斥量 互斥锁
	pthread_mutex_destroy(&mutex);
	if(0 != ret)
	{
		printf("pthread_mutex_destroy failed...\n");
		return 1;
	}
	printf("销毁一个互斥量成功...\n");

	return 0;
}
